Sphere intersection

We wish to find out when a ray hits a sphere. Our spheres will be defined by the implicit equation of a sphere $$ (\mathbf{p - c}) \cdot (\mathbf{p - c}) - r^2 = 0 $$

where \( \mathbf{p}) \) is the a possible position on the sphere, \( \mathbf{c}) \) is the center of the sphere, and \( r \) is the radius.

Given the parametric equation of a ray $$ \mathbf{r} = \mathbf{e} + t\mathbf{d}\ $$ we can solve for the intersection by setting the equations equal to one another. Put the ray equation in place of the \( \mathbf{p}\) in the sphere equation results in:

$$ (\mathbf{e} + t\mathbf{d} - \mathbf{c}) \cdot (\mathbf{e} + t\mathbf{d} - \mathbf{c}) - r^2 = 0; $$

This expands to:

$$ ( \mathbf{d} \cdot \mathbf{d}) t^2 + 2 \mathbf{d} \cdot (\mathbf{e} - \mathbf{c}) t + (\mathbf{e} - \mathbf{c}) \cdot (\mathbf{e} - \mathbf{c}) - r^2 = 0 $$

This result is solvable using the quadratic formula: $$ x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$

where

$$ a = \mathbf{d} \cdot \mathbf{d}) $$

$$ b = 2 \mathbf{d} \cdot (\mathbf{e} - \mathbf{c}) $$

$$ c = (\mathbf{e} - \mathbf{c}) \cdot (\mathbf{e} - \mathbf{c}) - r^2 = 0 $$

We can then solve for t: $$ t = \frac{ - \mathbf{d} \cdot (\mathbf{e} - \mathbf{c}) \pm \sqrt{ ( \mathbf{d} \cdot (\mathbf{e} - \mathbf{c}))^2 - (\mathbf{d} \cdot \mathbf{d}) ( (\mathbf{e} - \mathbf{c}) \cdot (\mathbf{e} - \mathbf{c}) - r^2) }}{ (\mathbf{d} \cdot \mathbf{d}) } $$